Interfejs LLM Inference API umożliwia uruchamianie dużych modeli językowych (LLM) całkowicie na urządzeniu. Można go używać do wykonywania wielu zadań, takich jak generowanie tekstu, pobieranie informacji w formie języka naturalnego czy streszczanie dokumentów. Zadanie zapewnia wbudowane wsparcie dla wielu dużych modeli językowych typu „tekst na tekst”, dzięki czemu możesz stosować najnowsze modele generatywnej AI na urządzeniu w swoich aplikacjach i produktach.
Zadaniem tym jest wbudowana obsługa różnych dużych modeli językowych. Modele hostowane na stronie LiteRT Community są dostępne w formacie zgodnym z MediaPipe i nie wymagają dodatkowych konwersji ani kompilacji.
Za pomocą AI Edge Torch możesz eksportować modele PyTorch do modeli LiteRT (tflite
) z wieloma podpisami, które są połączone z parametrami tokenizera w pakietach zadań. Modele przekonwertowane za pomocą AI Edge Torch są zgodne z interfejsem LLM Inference API i mogą działać na procesorze CPU, dzięki czemu nadają się do aplikacji na Androida i iOS.
Rozpocznij
Aby zacząć korzystać z tego zadania, postępuj zgodnie z jednym z tych przewodników dotyczących wdrażania na platformie docelowej. Te przewodniki dotyczące poszczególnych platform zawierają podstawowe informacje o wdrożeniu tego zadania, a także przykłady kodu, które korzystają z dostępnego modelu i zalecanych opcji konfiguracji:
Sieć:
Android:
iOS
Szczegóły zadania
W tej sekcji opisano możliwości, dane wejściowe, dane wyjściowe i opcje konfiguracji tego zadania.
Funkcje
Interfejs LLM Inference API zawiera te najważniejsze funkcje:
- Generowanie tekstu na podstawie tekstu – generowanie tekstu na podstawie prompta tekstowego.
- Wybór modelu LLM – użyj wielu modeli, aby dostosować aplikację do konkretnych zastosowań. Możesz też przeprowadzić ponowne uczenie i zastosować do modelu niestandardowe wagi.
- Wsparcie dla LoRA – rozszerzanie i dostosowywanie możliwości LLM za pomocą modelu LoRA albo przez trenowanie na całym zbiorze danych, albo przez pobranie gotowych modeli LoRA z otwartej społeczności (niezgodne z modelami przekonwertowanymi za pomocą interfejsu AI Edge Torch Generative API).
Dane wejściowe zadania | Dane wyjściowe zadań |
---|---|
Interfejs LLM Inference API obsługuje te dane wejściowe:
|
Interfejs LLM Inference API zwraca te wyniki:
|
Opcje konfiguracji
To zadanie ma te opcje konfiguracji:
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
modelPath |
Ścieżka do miejsca przechowywania modelu w katalogu projektu. | ŚCIEŻKA | Nie dotyczy |
maxTokens |
Maksymalna liczba tokenów (tokenów wejściowych + tokenów wyjściowych), którą obsługuje model. | Liczba całkowita | 512 |
topK |
Liczba tokenów, które model bierze pod uwagę na każdym etapie generowania. Ogranicza prognozy do k najbardziej prawdopodobnych tokenów. | Liczba całkowita | 40 |
temperature |
Ilość losowości wprowadzonej podczas generowania. Wyższa temperatura powoduje większą kreatywność wygenerowanego tekstu, a niższa – bardziej przewidywalne generowanie. | Liczba zmiennoprzecinkowa | 0,8 |
randomSeed |
Losowe nasiono użyte podczas generowania tekstu. | Liczba całkowita | 0 |
loraPath |
Ścieżka bezwzględna do modelu LoRa na urządzeniu. Uwaga: ta funkcja jest zgodna tylko z modelami GPU. | ŚCIEŻKA | Nie dotyczy |
resultListener |
Ustawia odbiornik wyników na odbiór wyników asynchronicznie. Ma zastosowanie tylko wtedy, gdy używasz metody generowania asynchronicznego. | Nie dotyczy | Nie dotyczy |
errorListener |
Ustawia opcjonalny odbiornik błędów. | Nie dotyczy | Nie dotyczy |
Modele
Interfejs LLM Inference API obsługuje wiele dużych modeli językowych tekst-tekst, w tym wbudowane wsparcie dla kilku modeli zoptymalizowanych pod kątem działania w przeglądarkach i na urządzeniach mobilnych. Te lekkie modele można stosować do wykonywania wnioskowań bezpośrednio na urządzeniu.
Zanim zainicjujesz interfejs LLM Inference API, pobierz model i zapisz go w katalogu projektu. Możesz użyć wcześniej przekonwertowanego modelu z repozytorium HuggingFace LiteRT Community lub przekonwertować model do formatu zgodnego z MediaPipe za pomocą konwertera generatywnego AI Edge Torch.
Jeśli nie masz jeszcze modelu LLM, którego możesz używać z interfejsem LLM Inference API, zacznij od jednego z tych modeli.
Gemma-3 1B
Gemma-3 1B to najnowszy model z rodziny Gemma, czyli rodziny lekkich, najnowocześniejszych otwartych modeli opracowanych na podstawie tych samych badań i technologii, które posłużyły do stworzenia modeli Gemini. Model zawiera 1 mld parametrów i otwarte wartości wag. Wersja 1B to najlżejszy model z rodziny Gemma, dzięki czemu doskonale nadaje się do wielu zastosowań na urządzeniu.
Model Gemma-3 1B z HuggingFace jest dostępny w formacie .task
i gotowy do użycia z interfejsem LLM Inference API w przypadku aplikacji na Androida i w przeglądarce.
Podczas uruchamiania Gemma-3 1B z interfejsem LLM Inference API skonfiguruj te opcje:
preferredBackend
: ta opcja pozwala wybrać backendCPU
lubGPU
. Ta opcja jest dostępna tylko na urządzeniach z Androidem.supportedLoraRanks
: interfejsu LLM Inference API nie można skonfigurować tak, aby obsługiwał model Gemma-3 1B w ramach adaptacji o niskim stopniu uogólniania (LoRA). Nie używaj opcjisupportedLoraRanks
aniloraRanks
.maxTokens
: wartość parametrumaxTokens
musi być zgodna z rozmiarem kontekstu wbudowanym w model. Może być też nazywany pamięcią podręczną par klucz-wartość lub długością kontekstu.numResponses
: wartość musi zawsze wynosić 1. Ta opcja jest dostępna tylko w przeglądarce.
Podczas uruchamiania Gemma-3 1B w aplikacjach internetowych inicjalizacja może spowodować długi blok w bieżącym wątku. Jeśli to możliwe, zawsze uruchamiaj model z procesu roboczego.
Gemma-2 2B
Gemma-2 2B to wariant Gemma-2, który działa na wszystkich platformach.
Model zawiera 2 mld. parametrów i otwarte współczynniki. Gemma-2 2B to model znany z najnowocześniejszych umiejętności wnioskowania w swojej klasie.
Konwersja modelu PyTorch
Modele generatywne PyTorch można przekonwertować do formatu zgodnego z MediaPipe za pomocą interfejsu AI Edge Torch Generative API. Za pomocą interfejsu API możesz konwertować modele PyTorch na modele LiteRT (TensorFlow Lite) z wieloma podpisami. Więcej informacji o mapowaniu i eksportowaniu modeli znajdziesz na stronie AI Edge Torch na GitHub.
Konwertowanie modelu PyTorch za pomocą interfejsu AI Edge Torch Generative API wymaga wykonania tych czynności:
- Pobierz punkty kontrolne modelu PyTorch.
- Użyj interfejsu AI Edge Torch Generative API, aby utworzyć, przekonwertować i zquantized model do formatu zgodnego z MediaPipe (
.tflite
). - Utwórz pakiet zadań (
.task
) z pliku tflite i tokenizera modelu.
Konwerter Torch Generative konwertuje tylko na procesor i wymaga maszyny z systemem Linux z co najmniej 64 GB pamięci RAM.
Aby utworzyć pakiet zadań, użyj skryptu pakowania, aby utworzyć pakiet zadań. Proces grupowania łączy zmapowany model z dodatkowymi metadanymi (np. Parametry analizatora potrzebne do przeprowadzenia pełnego wnioskowania.
Proces grupowania modeli wymaga pakietu MediaPipe PyPI. Skrypt konwersji jest dostępny we wszystkich pakietach MediaPipe po 0.10.14
.
Zainstaluj i zaimportuj zależności za pomocą:
$ python3 -m pip install mediapipe
Aby połączyć model z biblioteką genai.bundler
:
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
Parametr | Opis | Akceptowane wartości |
---|---|---|
tflite_model |
Ścieżka do wyeksportowanego modelu TFLite AI Edge. | ŚCIEŻKA |
tokenizer_model |
Ścieżka do modelu tokenizera SentencePiece. | ŚCIEŻKA |
start_token |
Token rozpoczęcia modelu. W dostarczonym modelu tokenizera musi znajdować się znacznik początkowy. | CIĄG ZNAKÓW |
stop_tokens |
Modelowanie konkretnych tokenów stop. Tokeny stop muszą występować w dostarczonym modelu tokenizera. | LIST[STRING] |
output_filename |
Nazwa pliku wyjściowego pakietu zadań. | ŚCIEŻKA |
Dostosowywanie LoRa
Interfejs API Mediapipe LLM inference można skonfigurować tak, aby obsługiwał adaptację niskiego rzędu (LoRA) w przypadku dużych modeli językowych. Dzięki dostosowanym modelom LoRA deweloperzy mogą dostosowywać działanie LLM za pomocą ekonomicznego procesu trenowania.Obsługa LoRA w LLM Inference API działa we wszystkich wariantach Gemma i modelach Phi-2 na backendzie GPU, przy czym wagi LoRA są stosowane tylko do warstw uwagi. Ta początkowa implementacja jest eksperymentalnym interfejsem API, który posłuży do przyszłych prac nad obsługą większej liczby modeli i różnych typów warstw w przyszłych aktualizacjach.
Przygotowanie modeli LoRA
Postępuj zgodnie ze wskazówkami na stronie huggingface.org, aby wytrenować dostrojony model LoRA na podstawie własnego zbioru danych z obsługiwanymi typami modeli Gemma lub Phi-2. Modele Gemma-2 2B, Gemma
2B i Phi-2 są dostępne na stronie huggingface w formacie safetensors. Ponieważ interfejs LLM Inference API obsługuje tylko LoRA na warstwach uwagi, podczas tworzenia modeluLoraConfig
należy określić tylko warstwy uwagi:
# For Gemma
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
Do testowania dostępne są publicznie dostępne modele LoRA, które pasują do interfejsu LLM Inference API dostępnego na HuggingFace. Na przykład: monsterapi/gemma-2b-lora-maths-orca-200k w przypadku Gemma-2B i lole25/phi-2-sft-ultrachat-lora w przypadku Phi-2.
Po wytrenowaniu modelu na przygotowanym zbiorze danych i zapisaniu go otrzymasz plik adapter_model.safetensors
zawierający dostrojone wagi modelu LoRA.
Plik safetensors to punkt kontrolny LoRA używany do konwertowania modelu.
W następnym kroku musisz przekonwertować wagi modelu na TensorFlow Lite Flatbuffer za pomocą pakietu MediaPipe w Pythonie. W polu ConversionConfig
należy podać opcje modelu podstawowego oraz dodatkowe opcje LoRA. Ponieważ interfejs API obsługuje tylko wnioskowanie LoRA z GPU, backend musi być ustawiony na 'gpu'
.
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Konwerter wygeneruje 2 pliki flatbuffera TFLite: jeden dla modelu podstawowego, a drugi dla modelu LoRA.
Wnioskowanie modelu LoRA
Interfejsy API LLM Inference na potrzeby sieci Web, Androida i iOS zostały zaktualizowane, aby obsługiwać wnioskowanie modelu LoRA.
Android obsługuje statyczny LoRA podczas inicjowania. Aby załadować model LoRA, użytkownicy muszą podać ścieżkę do tego modelu oraz model LLM podstawowy.// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath('<path to base model>')
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath('<path to LoRA model>')
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
Aby uruchomić wnioskowanie LLM z LoRA, użyj tych samych metod generateResponse()
lub generateResponseAsync()
co w przypadku modelu podstawowego.